//UTF-8 ENCODED
/*
** собственно библиотека, предосталяющая функции фреймворка.
** ======================================================================
**  libqdroid.h
** ======================================================================
*/

#include "libqdroid.h"

t_QDroid *getDroidHiveQueen()
{
    if (DroidHiveQueen==0)
        {
            DroidHiveQueen = new t_QDroid(NULL);// это и есть наш диспетчер :)
            DroidHiveQueen->set_useGui(false);//useGUI; //now - always not use... at least for a while
            DroidHiveQueen->set_platformVersion(Version);
        };
    return DroidHiveQueen;
}

QScriptEngine *getQScriptEngine()
{
    return getDroidHiveQueen()->getQScriptEngine();
}
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
//тестовая функция для проверки работы с переменной из библиотеки
qint32 get_counter() //запрос состояний. За выделение памяти ответственнен вызывающий процесс.
{
        return value++;
}
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
//тестовая функция для проверки работы с переменной из библиотеки
QString setLogFile(QString _logFileName) //запрос состояний. За выделение памяти ответственнен вызывающий процесс.
{
        logFileName=_logFileName;
        return logFileName;
}

//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
bool set_doQuitOnErrors(bool newVar)
{
     DroidHiveQueen = getDroidHiveQueen();
     DroidHiveQueen->set_doQuitOnErrors(newVar);
}

//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
int init()
{

    //имя файла куда будем скидывать логи. Критично.
    //QString logFileName;//=QString::fromUtf16(_log_file_name);
        if (logFileName.isEmpty())
          {
                logFileName=QString("libqdroid.log");
          };

        //далее - делаем так если нам нужно писать все debug-сообщения в файл:
        //Otpd_OpenFileForDebugMessages("libotpd_debugmsg.log"); //2008.04.09
    //2008.05.10 // TODO возможны проблемы с русским языком и с русскими путями. особенно под виндоус.
        Otpd_OpenFileForDebugMessages(logFileName.toAscii().data()); // <-- здесь!
        // после этого всякое указание типа
        // qDebug()<<"lib:init_0()::0030 waiting for dispatcher ready...";
        // будет добавлять строку в файл

        QString Version="LibQDroid.probe.2010.06.09_2246;  build time:2010.06.09_2250";

    //        //BUG!!!!! что делать если у нас уже есть QDroid ????!!!!
    //        DroidHiveQueen = new t_QDroid(NULL);// это и есть наш диспетчер :)
    //        DroidHiveQueen->useGui = false;//useGUI; //now - always not use... at least for a while
    //        DroidHiveQueen->platformVersion = Version;

        DroidHiveQueen = getDroidHiveQueen();
    return 0;

}
//-----------------------------------------
// 2008.05.10
// ushort *_log_file_name <-- в UTF16 кодированное имя.
QVariant init_run(QStringList comandPromptArgList, QObject *_context)
{
    qDebug()<<"lib:init_run()::0020 started...";

    init();
    if (DroidHiveQueen==0) DroidHiveQueen=getDroidHiveQueen();
    //ВАЖНО! думается мне, в этот момент уже должен работать EventLoop!!!!
    DroidHiveQueen->init(comandPromptArgList, _context);

    return 0;//all ok
}


qint32 set_argList( QStringList _argList) //установить спсиок параметров, который надо передать объекту
{
    if (DroidHiveQueen==0) DroidHiveQueen=getDroidHiveQueen();
    DroidHiveQueen->argList=_argList;
}


//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
//  расширенные функции обработки скриптов
QString getVersion()//
{
   return qdLibVersionString;
}

//-----------------------------------------
// 2010.06.10
int loadNewScript(QString _fileName )//++2010.06.24 загрузить скрипт из файла
{
   return DroidHiveQueen->loadNewScript(_fileName );
}

//-----------------------------------------
//++2010.06.24 вернуть загруженный скрипт
QStringList getLoadedScript()
{
    return DroidHiveQueen->getLoadedScript();
}

//-----------------------------------------
//++2010.06.24 выполнить скрипт
//_source - содержание текста скрипта построчно
//так уж вышло что это один из внутренних исходных форматов
QScriptValue runScript(QStringList _source, QObject* _context)
{
    return DroidHiveQueen->runScript(_source,_context);
}

//-----------------------------------------
//++2010.06.24 выполнить скрипт
//_source - содержание текста скрипта. Многострочная строка.
QScriptValue runScript_short(QString _source, QObject* _context)
{
    return DroidHiveQueen->runScript(_source,_context);
}

//-----------------------------------------
//++2010.07.06 работа с переменными
QScriptValue setScriptObject(QString _name, QObject* _object)
{
    return DroidHiveQueen->setScriptObjectVar(_name, _object);//++2010.07.06
}
//-----------------------------------------
//++2010.07.06 работа с переменными
QScriptValue setScriptValue(QString _name, QString _value)
{
    return DroidHiveQueen->setScriptVar(_name, _value);//++2010.07.06
}

//-----------------------------------------
//++2011.02.22 работа с переменными
QScriptValue getScriptVar(QString _name)
{
    return DroidHiveQueen->getScriptVar(_name);//++2011.02.22
}
//-----------------------------------------
//++2011.02.22 загрузить расширение по его имени
QScriptValue loadExtention(QString _extentionName)
{

}

